package com.grm.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

/**
 * 日期/时间工具类
 *
 * @author gaorimao
 * @since 2022-06-22
 */
public class DateUtils {
    public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    public static final String TIMESTAMP_FORMAT = "yyyyMMddHHmmssS";

    /**
     * 时间字符串转时间格式
     * @param dateString 时间字符串
     * @return date
     */
    public static Date dateStringToDate(String dateString){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
        Date date = null;
        try {
            date = simpleDateFormat.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 时间字符串转时间格式
     * @param dateString 时间字符串
     * @param format 时间格式
     * @return date
     */
    public static Date dateStringToDate(String dateString,String format){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        Date date = null;
        try {
            date = simpleDateFormat.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 时间转时间字符串格式
     * @param date 时间
     * @param format 时间格式
     * @return dateStr
     */
    public static String dateToDateStr(Date date,String format){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        return simpleDateFormat.format(date);
    }

    /**
     * 时间转时间字符串格式
     * @param date 时间
     * @param format 时间格式
     * @return dateStr
     */
    public static String dateToTimeStampStr(Date date,String format){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        return simpleDateFormat.format(date);
    }

    public static Date localDateTimeToDate(LocalDateTime localDateTime){
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 时间戳转时间字符串格式
     * @param timestamp 时间戳
     * @param format 时间格式
     * @return dateStr
     */
    public static String timestampToDateStr(Long timestamp,String format){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        return simpleDateFormat.format(new Date(timestamp));
    }
}
